import Request from '@/js_sdk/luch-request/luch-request/index.js'
const http = new Request()

//获取本地storage的token
const getTokenStorage = () => {
	let token = ''
	try {
		token = uni.getStorageSync('token')
	} catch (e) {}
	return token
}

// 全局配置
http.setConfig((config) => {
	// 请求的基地址
	// 开发环境
	if(process.env.NODE_ENV==='development'){
		
		// 社内外网
		// config.baseURL = 'http://192.168.1.100:8880/app-api'
		// 社内网
		// config.baseURL = 'http://192.168.3.176:8880/app-api'
		// config.baseURL = 'http://10.34.19.154:8880/app-api'
		// config.baseURL = 'http://10.34.39.88:8880/app-api'
		// 家
		// config.baseURL = 'http://192.168.31.9:8880/app-api'
		// 手机热点
		// config.baseURL = 'http://192.168.134.102:8880/app-api'
		// 测试生产环境
		// config.baseURL = 'http://10.34.13.15:8880/app-api'
		// 测试生产环境
		config.baseURL = 'http://127.0.0.1:8880/app-api'
	} else{ 	// 生产环境
		config.baseURL = 'http://10.34.13.15:8880/app-api'
	}
	
	config.header = {
		...config.header,
		'Cache-Control':'no-cache',		// 不缓存
		// a: 1 //自定义请求头
	}
	// 自定义的配置, 主要给拦截器用
	config.custom = {
		auth: false, //是否使用token
		loading: true //是否使用loading
	}
	return config
})

// 全局请求拦截器
http.interceptors.request.use((config) => {
	// 合并方式设置请求头
	config.header = {
		...config.header,
		// c: 123
	}
	//请求超时时间
	config.timeout=10000
	// 当自定义配置的auth为true时, 每次请求需验证token
	// 把token放进请求头
	if (config.custom.auth) {
		config.header.token = getTokenStorage()
		// console.log(config.header.token);
		if(uni.$u.test.isEmpty(config.header.token)){
			return Promise.reject(config)
		}
	}
	// 当自定义配置的loading为true时, 每次请求前都显示loading 
	if (config.custom.loading) {
		uni.showLoading({
			title: 'loading',
			mask: true
		})
	}
	// if (!token) { // 如果token不存在，return Promise.reject(config) 会取消本次请求
	// 	return Promise.reject(config);
	// }
	return config;
}, (config) => {
	if (config.custom.loading) {
		uni.hideLoading()
	}
	return Promise.reject(config);
})

// 全局响应拦截器
http.interceptors.response.use((response) => {
	
	/* 请求之后拦截器。可以使用async await 做异步操作  */
	if (response.config.custom.loading) {
		uni.hideLoading()
	}
	
	//对下载文件请求进行响应拦截
	if(!uni.$u.test.isEmpty(response.tempFilePath)){
		return response
	}
	
	// 对响应的标准数据进行拦截
	let {data}=response
	if (response.data.code !== 200) { // 服务端返回的状态码不等于200，则reject()
		return Promise.reject(data)
	}
	return  data		// 直接返回数据
}, (response) => { // 请求错误做点什么。可以使用async await 做异步操作
	if (response.config.custom.loading) {
		uni.hideLoading()
	}
	return Promise.reject(response)
})

export {
	http
}
